# -*- coding:utf-8 -*-

import requests
import base64
from .app import bot
from .config import config


def call_bot_2_get(param_dic, is_json=True):
    ip, port = config.bot_ip, config.bot_http_port
    url = f"http://{ip}:{port}/parse"
    res = requests.post(url, data=param_dic)
    return res.json() if is_json else res.text

def call_bot(param_dic):
    data = bot.jsonify(param_dic)
    bot.client.send(data)







def send_text_msg(robot_wxid, to_wxid, msg):
    ''' 发送文本消息
            包括群消息, 好友消息
    '''
    ret = {
        'type': 'send_text_msg',
        'robot_wxid': robot_wxid,
        'to_wxid': to_wxid,
        'msg': msg
    }
    return call_bot(ret)

def send_bin_msg(robot_wxid, to_wxid, msg):
    ''' 发送utf8消息
            包括群消息, 好友消息
    '''
    
    ret = {
        'type': 'send_bin_msg',
        'robot_wxid': robot_wxid,
        'to_wxid': to_wxid,
        'msg': str(base64.b64encode(msg.encode('utf-8')))[2:-1]
    }
    return call_bot(ret)

def send_group_at_msg(robot_wxid, group_wxid, member_wxid, member_name, msg):
    ''' 
        发送群消息并艾特某人 
        robot_wxid      str     用哪个机器人发这条消息
        group_wxid      str     要发送的群ID 
        member_wxid     str     要艾特成员的ID，支持多个，可用英文,号或者|号分割他们
        member_name     str     要艾特成员的自定义昵称内容，可不填，则取默认的昵称
        msg             str     消息内容
    '''
    ret = {
        'type': 'send_group_at_msg',
        'robot_wxid': robot_wxid,
        'group_wxid': group_wxid,
        'member_wxid': member_wxid,
        'member_name': member_name,
        'msg': msg
    }
    return call_bot(ret)

def send_image_msg(robot_wxid, to_wxid, path):# 默认是本地文件
    ''' 发送图片消息 '''
    ret = {
        'type': 'send_image_msg',
        'robot_wxid': robot_wxid,
        'to_wxid': to_wxid,
        'path': path
    }
    return call_bot(ret)

def send_video_msg(robot_wxid, to_wxid, path):
    ''' 发送视频消息 '''
    ret = {
        'type': 'send_video_msg',
        'robot_wxid': robot_wxid,
        'to_wxid': to_wxid,
        'path': path
    }
    return call_bot(ret)

def send_file_msg(robot_wxid, to_wxid, path):
    ''' 发送文件消息 '''
    ret = {
        'type': 'send_file_msg',
        'robot_wxid': robot_wxid,
        'to_wxid': to_wxid,
        'path': path
    }
    return call_bot(ret)

def send_emoji_msg(robot_wxid, to_wxid, path):
    ''' 发送动态表情 '''
    ret = {
        'type': 'send_emoji_msg',
        'robot_wxid': robot_wxid,
        'to_wxid': to_wxid,
        'path': path
    }
    return call_bot(ret)

def send_link_msg(robot_wxid, to_wxid, title, text, target_url, pic_url, icon_url):
    ''' 发送分享链接 '''
    ret = {
        'type': 'send_link_msg',
        'robot_wxid': robot_wxid,
        'to_wxid': to_wxid,
        'title': title,
        'text': text,
        'target_url': target_url,
        'pic_url': pic_url,
        'icon_url': icon_url
    }
    return call_bot(ret)

def send_music_msg(robot_wxid, to_wxid, name, music_type):
    ''' 发送音乐消息 '''
    ret = {
        'type': 'send_music_msg',
        'robot_wxid': robot_wxid,
        'to_wxid': to_wxid,
        'name': name,
        "music_type": music_type, # 0 随机模式 1 网易云音乐 2 酷狗音乐
    }
    return call_bot(ret)

def send_card_info(robot_wxid, to_wxid, friend_wxid):
    '''
        发送名片消息
    '''
    ret = {
        'type': 'send_card_info',
        'robot_wxid': robot_wxid,
        'to_wxid': to_wxid,
        'friend_wxid': friend_wxid
    }
    return call_bot(ret)

def send_mini_app_info(robot_wxid, to_wxid, xml_content):
    '''
        发送小程序消息
    '''
    ret = {
        'type': 'send_mini_app_info',
        'robot_wxid': robot_wxid,
        'to_wxid': to_wxid,
        'xml_content': xml_content
    }
    return call_bot(ret)

def accept_transfer(robot_wxid, friend_wxid, json_string):
    ''' 接收好友转账 '''
    ret = {
        'type': 'accept_transfer',
        'robot_wxid': robot_wxid,
        'friend_wxid': friend_wxid,
        'msg': json_string # 转账事件原消息
    }
    return call_bot(ret)

def agree_group_invite(robot_wxid, json_string):
    ''' 同意群聊邀请 '''
    ret = {
        'type': 'agree_group_invite',
        'robot_wxid': robot_wxid,
        'json_string': json_string # 转账事件原消息
    }
    return call_bot(ret)

def agree_friend_verify(robot_wxid, json_string):
    ''' 同意好友请求 '''
    ret = {
        'type': 'agree_friend_verify',
        'robot_wxid': robot_wxid,
        'json_string': json_string # 转账事件原消息
    }
    return call_bot(ret)

def modify_friend_note(robot_wxid, friend_wxid, note):
    ''' 修改好友备注

    '''
    ret = {
        'type': 'modify_friend_note',
        'robot_wxid': robot_wxid,
        'friend_wxid': friend_wxid,
        'note': note # 新备注（空字符串则是删除备注）
    }
    return call_bot(ret)

def delete_friend(robot_wxid, friend_wxid):
    ''' 删除好友 '''
    ret = {
        'type': 'delete_friend',
        'robot_wxid': robot_wxid,
        'friend_wxid': friend_wxid
    }
    return call_bot(ret)

def remove_group_member(robot_wxid, group_wxid, member_wxid):
    ''' 踢出群成员 '''
    ret = {
        'type': 'remove_group_member',
        'robot_wxid': robot_wxid,
        'group_wxid': group_wxid,
        'member_wxid': member_wxid
    }
    return call_bot(ret)

def modify_group_name(robot_wxid, group_wxid, group_name):
    ''' 修改群名称 '''
    ret = {
        'type': 'modify_group_name',
        'robot_wxid': robot_wxid,
        'group_wxid': group_wxid,
        'group_name': group_name
    }
    return call_bot(ret)

def modify_group_notice(robot_wxid, group_wxid, content):
    ''' 修改群公告 '''
    ret = {
        'type': 'modify_group_notice',
        'robot_wxid': robot_wxid,
        'group_wxid': group_wxid,
        'content': content
    }
    return call_bot(ret)

def building_group(robot_wxid, friends):
    ''' 建立新群 '''
    ret = {
        'type': 'building_group',
        'robot_wxid': robot_wxid,
        'friend_list': friends # 好友id数组, 用|分隔的wxid文本
    }
    return call_bot(ret)

def quit_group(robot_wxid, group_wxid):
    ''' 退出群聊 '''
    ret = {
        'type': 'quit_group',
        'robot_wxid': robot_wxid,
        'group_wxid': group_wxid
    }
    return call_bot(ret)

def invite_in_group(robot_wxid, group_wxid, friend_wxid):
    ''' 邀请加入群聊 '''
    ret = {
        'type': 'invite_in_group',
        'robot_wxid': robot_wxid,
        'group_wxid': group_wxid,
        'friend_wxid': friend_wxid
    }
    return call_bot(ret)

def cancel_top_contact(robot_wxid, friend_wxid):
    '''
        取消置顶联系人
    '''
    ret = {
        'type': 'cancel_top_contact',
        'robot_wxid': robot_wxid,
        'friend_wxid': friend_wxid
    }
    return call_bot(ret)

def set_top_contact(robot_wxid, friend_wxid):
    '''
        置顶联系人
    '''
    ret = {
        'type': 'set_top_contact',
        'robot_wxid': robot_wxid,
        'friend_wxid': friend_wxid
    }
    return call_bot(ret)

def add_log(msg_1, msg_2):
    '''
        添加日志
    '''
    ret = {
        'type': 'add_log',
        'msg_1': msg_1,
        'msg_2': msg_2
    }
    return call_bot(ret)

def relay_msg(robot_wxid, to_wxid, msg_id):
    '''
        转发消息
    '''
    ret = {
        'type': relay_msg,
        'robot_wxid': robot_wxid,
        'to_wxid': to_wxid,
        'msg_id': msg_id
    }
    return call_bot(ret)





def get_robot_name(robot_wxid):
    ''' 取指定登录账号的昵称 
    @return     string         昵称
    中文乱码，暂未查明原因
    '''
    ret = {
        'type': 'get_robot_name',
        'robot_wxid': robot_wxid
    }
    return call_bot_2_get(ret, False)

def get_robot_headimgurl(robot_wxid):
    ''' 取指定登录账号的头像
    @return     string         头像网址
    无返回值，正在排查
     '''
    ret = {
        'type': 'get_robot_headimgurl',
        'robot_wxid': robot_wxid
    }
    return call_bot_2_get(ret, False)

def get_logged_account_list():
    ''' 取登录账号列表
    @return     list[dict]         帐号列表
     '''
    ret = {
        'type': 'get_logged_account_list'
    }
    return call_bot_2_get(ret)

def get_friend_list(robot_wxid, is_refresh=0):
    ''' 取好友列表
    @return     list[dict]         好友列表
     '''
    ret = {
        'type': 'get_friend_list',
        'robot_wxid': robot_wxid, # 账户id（可选, 如果填空字符串, 即取所有登录账号的好友列表, 反正取指定账号的列表）
        'is_refresh': is_refresh # 是否刷新列表，0 从缓存获取 / 1 重新获取
    }
    return call_bot_2_get(ret)

def get_group_list(robot_wxid, is_refresh=0):
    ''' 取群聊列表
    @return     list[dict]         群列表
     '''
    ret = {
        'type': 'get_group_list',
        'robot_wxid': robot_wxid, # 账户id（可选, 如果填空字符串, 即取所有登录账号的好友列表, 反正取指定账号的列表）
        'is_refresh': is_refresh # 是否刷新列表，0 从缓存获取 / 1 重新获取
    }
    return call_bot_2_get(ret)

def get_group_member_detail(robot_wxid, group_wxid, member_wxid, is_refresh=0):
    ''' 取群成员资料
    @return     dict         群成员资料
     '''
    ret = {
        'type': 'get_group_member_detail',
        'robot_wxid': robot_wxid, # 账户id（可选, 如果填空字符串, 即取所有登录账号的好友列表, 反正取指定账号的列表）
        'group_wxid': group_wxid,
        'member_wxid': member_wxid,
        'is_refresh': is_refresh # 是否刷新列表，0 从缓存获取 / 1 重新获取
    }
    return call_bot_2_get(ret)

def get_group_member_list(robot_wxid, group_wxid, is_refresh=0):
    ''' 取群成员列表 
    @return     list[dict]         群成员(含资料)列表
    暂时不可用，还未查明原因
    '''
    ret = {
        'type': 'get_group_member_list',
        'robot_wxid': robot_wxid, # 账户id（可选, 如果填空字符串, 即取所有登录账号的好友列表, 反正取指定账号的列表）
        'group_wxid': group_wxid,
        'is_refresh': is_refresh # 是否刷新列表，0 从缓存获取 / 1 重新获取
    }
    return call_bot_2_get(ret)

def get_contact_headimgurl(robot_wxid, to_wxid):
    '''
        取指定联系人的头像
    '''
    ret = {
        'type': 'send_mini_app_info',
        'robot_wxid': robot_wxid,
        'to_wxid': to_wxid
    }
    return call_bot_2_get(ret)

def get_friend_list_ext(robot_wxid, is_refresh=0, out_rawdata=1):
    ''' 
        取好友列表   更优化
        @return     list[dict]         好友列表
     '''
    ret = {
        'type': 'get_friend_list_ext',
        'robot_wxid': robot_wxid, # 账户id（如果空字符串, 即取所有登录账号的好友列表, 反正取指定账号的列表）
        'is_refresh': is_refresh, # 是否刷新列表，0 从缓存获取 / 1 重新获取
        'out_rawdata': out_rawdata # 是否输出原始数据，为真则输出原始流（16进制），可用于正常显示emoji等特殊字符
    }
    return call_bot_2_get(ret)

def get_group_member_list_ext(robot_wxid, group_wxid, is_refresh=0):
    ''' 
        取群成员列表   更优化
        @return     list[dict]         群成员(含资料)列表
    '''
    ret = {
        'type': 'get_group_member_list_ext',
        'robot_wxid': robot_wxid, # 账户id（可选, 如果填空字符串, 即取所有登录账号的好友列表, 反正取指定账号的列表）
        'group_wxid': group_wxid,
        'is_refresh': is_refresh # 是否刷新列表，0 从缓存获取 / 1 重新获取
    }
    return call_bot_2_get(ret)

def get_group_member_detail_ext(robot_wxid, group_wxid, member_wxid, is_refresh=0):
    ''' 取群成员资料   更优化
        @return     dict         群成员资料
     '''
    ret = {
        'type': 'get_group_member_detail_ext',
        'robot_wxid': robot_wxid, # 账户id（可选, 如果填空字符串, 即取所有登录账号的好友列表, 反正取指定账号的列表）
        'group_wxid': group_wxid,
        'member_wxid': member_wxid,
        'is_refresh': is_refresh # 是否刷新列表，0 从缓存获取 / 1 重新获取
    }
    return call_bot_2_get(ret)

def get_group_list_ext(robot_wxid, is_refresh=0):
    ''' 取群聊列表   更优化
        @return     list[dict]         群列表
     '''
    ret = {
        'type': 'get_group_list_ext',
        'robot_wxid': robot_wxid, # 账户id（可选, 如果填空字符串, 即取所有登录账号的好友列表, 反正取指定账号的列表）
        'is_refresh': is_refresh # 是否刷新列表，0 从缓存获取 / 1 重新获取
    }
    return call_bot_2_get(ret)
